package business;

import java.util.ArrayList;

import persistence.db.DataSet;
import persistence.model.*;
import utility.Record;

public class FormationBL {
	
	public FormationBL() {}
	
	public FormationBL(int id) {
		f = (Formation) Formation.all().get(id);
	}

	private Formation f = null;	
	ArrayList<String> listeErreurs = null;

	/**
	 * @return retourne si la demande d'ajout ou de modification est valide ou non
	 */
	public boolean estValidePourModif(){
		boolean estValide = true;
		boolean existeDeja = false;
		
/*		for (AbstractModel formation : Formation.all())
		{
			Formation fCourant = (Formation)formation;
			if(fCourant.getNomFormation().equals(f.getNomFormation()) ){
				existeDeja = true;
				estValide = false;
			}
		}
		if(existeDeja){
			listeErreurs.add("Cette formation existe déjà.");				
		}
*/		System.out.println(listeErreurs);
		return estValide;
	}
	

	/**
	 * @return retourne si la demande de suppression est valide ou non
	 */
	public boolean estValidePourSuppr(){
		boolean estValide = true;
		
		// S'il existe des semestres associes a l'annee etude a supprime, n'est pas valide
		ArrayList<Record> listeAnnees = getListeAnnees();
		if (!listeAnnees.isEmpty()) {
			listeErreurs.add("Année étude existantes à cette formation.");
			estValide = false;
		} else {
			estValide = true;
		}
		return estValide;
	}
	
	/**
	 * @param id : identifiant de la Formation
	 * @param nom : nom de la Formation
	 * @param desc : description de la Formation
	 */
	public ArrayList<String> ajouterFormation(int id, String nom, String desc, DataSet dsAE) {
		f = new Formation(id, nom, desc, dsAE);
		ArrayList<String> listeErreurs = new ArrayList<String>();
		if (this.estValidePourModif()){
			f.save();
		}
		return listeErreurs;
	}	
	
	/**
	 * @param id : identifiant de la Formation
	 * @param nom : nom de la Formation
	 * @param desc : description de la Formation
	 */
	public ArrayList<String> modifierFormation(int id, String nom, String desc, DataSet dsAE) {
		f = new Formation(id, nom, desc, dsAE);
		ArrayList<String> listeErreurs = new ArrayList<String>();
		if (this.estValidePourModif()){
			f.save();
		}
		return listeErreurs;
	}
	
	/**
	 * @param id : identifiant de la Formation
	 * @param nom : nom de la Formation
	 * @param desc : description de la Formation
	 */
	public ArrayList<String> supprimerFormation() {
		ArrayList<String> listeErreurs = new ArrayList<String>();
		if (this.estValidePourSuppr()) {
			f.delete();
		}
		return listeErreurs;
	}
	
	/* Ensemble des getters et setters -> delegation vers la persistance */
	
	public int getIdFormation() {
		return f.getId();
	}

	public void setIdFormation(int idFormation) {
		f.setId(idFormation);
	}

	public String getNomFormation() {
		return f.getNomFormation();
	}

	public void setNomFormation(String nomFormation) {
		f.setNomFormation(nomFormation);
	}

	public String getDescriptionFormation() {
		return f.getDescriptionFormation();
	}

	public void setDescriptionFormation(String descriptionFormation) {
		f.setDescriptionFormation(descriptionFormation);
	}
	
	public DataSet getAnneeEtudeSet(){
		return f.getAnneesEtudesFormation();
	}
	
	public void setAnneeEtudeSet(DataSet anneeEtudeSet){
		f.setAnneesEtudesFormation(anneeEtudeSet);
	}
	/**
	 * @return une liste de record
	 * chaque record comprenant le nom d'une formation ainsi que son id
	 */
	public ArrayList<Record> getListeFormation()
	{
		ArrayList<Record> listeFormation = new ArrayList<Record>();
		for (AbstractModel f : Formation.all())
		{
			Formation formationCourant = (Formation)f;
			
			int idFormation = formationCourant.getId();
			String nomFormation = formationCourant.getNomFormation();
			
			listeFormation.add(new Record(idFormation, nomFormation));
		}
		
		return listeFormation;
	}
	
	/**
	 * TODO @return 
	 */
	public ArrayList<Record> getListeAnnees()
	{
		ArrayList<Record> listeAnnee = new ArrayList<Record>();
		
		for (AbstractModel a : f.getAnneesEtudesFormation())
		{
			AnneeEtude anneeEtudeCourant = (AnneeEtude)a;
			
			int idAnneeE = anneeEtudeCourant.getId();
			String nomAnnee = anneeEtudeCourant.getNomAnneeEtude();
			
			listeAnnee.add(new Record(idAnneeE, nomAnnee));
		}
		
		return listeAnnee;
	}

}
